// TypeScript 提供 了 从 旧 类型 中 创建 新 类型 的 一种 方式， 也就是“ 映射 类型”。
// 例1： 从旧类型T中创建一个新类型myReadonly， myReadonly为只读类型
type myReadonly<T> = {
  readonly [P in keyof T]: T[P];
}
// 例2： 从旧类型中创建一个新类型myPartial，myPartial为可选类型
type myPartial<T> = {
  [P in keyof T]?: T[P];
}

interface Person5 {
  name: string;
  age: number;
}
type Person4 = myReadonly<Person5>
const per2:Person4 = { name: '伽罗', age: 19 }
console.log(per2); // { name: '伽罗', age: 19 }
// per2.name = '黄忠' // 报错：Cannot assign to 'name' because it is a read-only property.

type Person6 = myPartial<Person5>
const per3: Person6 = { name: '公孙离' } // 不会因为没写age 就报错，因为name或者age可选
console.log(per3); // {name: "公孙离"}

